Win32 Global API Hook - 2 ٸ μ ּҰ !! (1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

     𸣰ڱ. ÷ ݸ Ἥ Ȥ  ϼ, ̹ º
 ó  λ縦 帮 ϰڽϴ. ^^    Ű .  
 ذ鼭  غ̴ٸ   Ŷ Ͻϴ. 
   ̹ ºʹ ణ  ʿҵ ѵ. ̹ ¿ ٷ  SOFTICE, 
BOUNDS CHECKER    NUMEGA SOFTWARE ý Ͼ Matt Pietrek ̵
   , API HOOKING  Ҽ  ˴ϴ.    
 𸣰 ̹  ε 츮 ϴ°(ù ¿ ?) Ϻϰ ̷ 
ٴԴϴ. ׷   𸣰  · Ѿ ٴ Ǵܿ ȸ  ¸ 
ϵ ϰڽϴ. ׷, Ѵ ǿ   ^^

(  Ī մϴ.)

1. CPU

 ýα׷ֿ CPU ߿伺 ʿ䰡 ̴. CPU ŰĴ ٵ ߿ϰ 
   ¿ װ ٷ . ڼѰ  ڷḦ ãų å 鼭 
ϰ 츮 ⼭ CPU α׷  ϴ ؼ ϰ Ѵ. ü 
 ޸𸮿 εϰ Ǹ Ģ  ּ( ƮƮ Ѵ.) ã 
װ  ѱ. (⼭  ѱٴ  IP(νƮ ) Ȱ õȴ
  .) ׷ Ǹ CPU װ  Ʈ о鼭 װ ؼϸ س
. ̷ ۾ ΰ ɾ ġȴٰ Ѵ. 翬 CPU ؼϴ ɾ ڵ̸ 
 1:1 ų ִ. ̰͸ ϰ Ѿ, CPU   ɾ ؼؼ 
  . Ȥ OOP α׷̳ ̺Ʈ帮(Windows) α׷ֿ ͼϴ
, α׷  ߾ CPU ɾ óϴ ׼   ̳ ̳ 
 ٸ ٴ° ϱ ٶ.

2. Win32 ޸ 

 ¿   , ýα׷ֿ ޸𸮰   ̴. 
 CPU ü ȣ带 ϴ ֱٿ ͼ  ߿  Ǿ 츮 翬 ¤
 Ѿ ϰڴ.  ð Ѱ ޸   κ ٷ ° Ÿ 
.  ̺κе 츮 ٷ ٽɸ ¤ Ѿ ҵϴ. CPU ޸𸮿 ִ ͸ ٷ
. CPU ũ Ѵ?  ȵǴ . CPU  ޸𸮶 ϸ鼭 ۾Ѵ. 
( ̸ ؼ ݷ  ִ  ְ, ϴ ̷ ϰ ¸ ϴ  
ذ  .)
 
 CPU 忡  ȣ ΰ ִµ,   ¿ ϴ  
 ϰ, ȣ忡 ؼ غ. ޸𸮰  ȣ ϰ, ϰ ϴ° 
ȣ Ư¡ ϳ ޸ ī Ϸ ̴. ޸𸮶 ϴ° ״ 
¥޸𸮰 ƴϴ. ܾϰǵ  ̹̽ ϵ ϴ  ƴ϶ 
 ݱ ˰ ־, ؿԴ ޸𸮴  ޸𸮿̴. ȣ忡 ޸𸮴 
ӵȴٴ ǹ̷ ޸(leaner Ǵ flat memory) Ѵ. ( ޸𸮿 ޸𸮴 
 ǹ̷ ϰڴ.) ޸𸮷 ؼ  ýۿ  ޸𸮺 ū ޸𸮸 츮 
Ҽ ־ ̴. ̷  ̴. Windows  4ⰡƮ ޸𸮸   ִ
,  α׷ ϴ  0-2ⰡƮ̸,  ̻ ü Ѵ. ̰  
޸̸,  ü ޸𸮸 ¡ī̶  Ѵ.
 
 ׷ ¡ī̶ ü  ϴ°ΰ?  ý νϴ ޸ 
.  CPU ü   ũⰡ پѵ  Intel CPU ü   4K
 ũ⸦ ´. ޸𸮴   ҵǰų ʵȴ.   ѹƮ ޸𸮸 
Ѵϴ ý ϳ  غѴ.  ϳ ߿  ϳ  ӵȴ
 ̴. ̸ ϳ ̻  δ ӵ  ִٴ ̴. ȣ忡 
޸𸮴  ޸   ּҷ  , 丮 ̺
̶ ڷᱸ ؼ ޸(޸) ȴ.  ޸𸮻󿡼 ӵǴ ޸
̶ ϴ  ޸𸮻󿡼 ӵ  ִ.
 
 ̷  ſ ߿ѵ,   ̷ϴ.   1ްƮ ޸𸮸 Ҵߴٰ ϴ
   ޸𸮴 ּһ󿡼 ӵȴٰ Ҽ . ޸𸮰 3 ļ 
Ѵٸ ׿  ּҵ 3ŭ  ׵ ġ 츮 ϴ´ ġ 
 ִٴ°̴.
 
3. μ ޸

   A α׷ ִٰ ġ. ׳  ޸𸮸 Ҵߴµ װ ּҰ 
0x70000000 ٰ̾ . ׷ B α׷ ޸𸮸 Ҵϴµ װ ּ  
0x70000000 ٰ̾ Ѵٸ, A, B  μ  ִ  ΰ ޸   δ 
 ұ? ּҴ    ٸ ޸̴. Ѵ  ּҰ   
  ּһ󿡼 ٸ  Ű ִ. ̰  ұ? ý μ
 Ҷ(½ũ Ī Ͼ) 丮  Ѵ. κп ּҴ 
丮 ̺  ּҿ ȴٰ ߴ.  ̵ Ѵٴ°  
Ұ Ű ּ(ּ) Ѵٴ  . ̷  μ A B   
 ˼  ̷ ؼ ü  ߰ ̴. 
 
 ׷ٸ  10ް Ʈ ޸𸮸 ϴ μ 10 ÿ Ѵٸ 100ް Ʈ 
޸𸮰 ʿұ? ݵ ׷ ʴ. ֳĸ    ̶  ü 
ϱ ̴. ü    ʿ ʴٰ ǴܵǸ װ ũ 
, ޸𸮿 Ѵ. ׷ٰ   ٽ ʿ  ũ   
 ޸𸮷 εѴ. ̷ Ϸ ۾ν α׷  ýۿ  ޸𸮺 
 ū ޸𸮸 Ҽ ִ°̴. 츮 ֺ ý  ϳ  Ʈ(page fault) 
ٷ ̷ ¡   ߻ϴµ ǥ   ޸𸮰 ҴǾ 
(ũ ҵ)  ġ ޸𸮿 ϴ ó Ϸ Ҷ̴. ý ⺻ 
̷  ڵ鷯 ġؼ ϰԵȴ.
 
׷ٸ  μ ּҰ Ҽ ִ°   غ.  ̷и þ
 ̹   ؼ Ȯغ . Ʒ Ʈ ڵ带 .

PVOID p1 = malloc(16);
if(NULL == p1)
    return -1;
memset(p1, "A", 16);
*((char*)p1 + 15) = "\0";

HANDLE hMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, 
    PAGE_READWRITE|SEC_RESERVE, 0, 16, NULL);
PVOID pMap = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 16);
PVOID p2 = VirtualAlloc(pMap, 16, MEM_COMMIT, PAGE_READWRITE);
if(NULL == p1)
    return -1;
memset(p2, "B", 16);
*((char*)p2 + 15) = "\0";

printf("p1:0x%08x \n", p1);
printf("dump:%s \n", p1);
printf("p2:0x%08x \n", p2);
printf("dump:%s \n", p2);

printf("press any key... \n");
getch();

if(NULL != p1)
    free(p1);
if(NULL != p2)
    VirtualFree(p2, 16, MEM_DECOMMIT);
if(NULL != pMap)
    UnmapViewOfFile(pMap);
if(NULL != hMap)
    CloseHandle(hMap);

 ϸ ϴ malloc() 16Ʈŭ ޸𸮸 ҴѴ  "A" ä  ּҿ 
 ȭ鿡 Ѵ. ׷ ޸𸮸   "B" ä  ּҿ  ȭ鿡 
Ѵ. ׸   ŰԷ ٸ, Է  ޸𸮸 ϰ α׷ 
. ޸𸮸Ͽ  ڼ  MSDN ϱ ٶ, ϴ  Ѻ.

p1:0x00780eb0
dump:AAAAAAAAAAAAAAA
p2:0x85536000
dump:BBBBBBBBBBBBBBB
press any key...

 ýۿ Ͱ µǰ  Է ٸ ° Ǿ. ŰԷ ϰԵǸ ޸
 ϰ α׷ ϰ ǹǷ ϴ ·  ΰ p1 p2 ּҸ  ΰ ι
° α׷ ۼ.

printf("dump:%s \n", 0x00780eb0);
printf("dump:%s \n", 0x85536000);

 ۼ α׷ p1, p2 ּҸ ϴ ڵ̴. Ȥ ׳ Cop & Pasteϴ   
ϴµ, ϵڵ ּҴ 翬 ռ ۼ α׷ µ ּҸ ־ Ұ̴. 
, ι° α׷  Ѻ.

dump:emTest2.exe
dump:BBBBBBBBBBBBBBB

? Ȯ ذ Ǵ°? к ڸ malloc Ҵ ޸ ּҴ ٸ μ
  ȿ ּҰ ȴ. ׷ ޸𸮸Ϸ Ҵ ޸ ּҴ ٸ μ ּҰ
  ȿѰ  ִ. (Ȥ    ι° α׷ Űٰ ý
 װų 罺ũ  𸥴. Ƹ κ ׷ ʾŶ Ȯ... ^^) ⼭ 
߿Ѱ ٷ ٸ μ ȿ ޸𸮿 ȿ ޸ ̴ּ. ּҴ ý۸ ణ
 ̰ ־ иѰ malloc Ҵ ޸ ּҴ 0x80000000 ۾̰, ޸
Ϸ Ҵ ޸ּҴ и 0x80000000 ū ּҷ ҴǾ̴. 0x80000000 10
 2147483648,  Ȯ 2ⰡƮ̴. 츮  ּҸ  ̰ μ ޸ 
ƴϸ ýۿ Ǵ ޸   ̴.

4. 

   ̹ ´ е鿡  ϰ ̾ ¿̴. κ ̷ 
̴ ̴.  ̹ ٷ鳻  츮  ؾ ۾ ʰ Ǵ ̴ 
ϴ  ϰ Ѿ ٶ. CPU ޸, μ   ̰͸  
  ϰ  ٸڷᳪ  ؼ  캸 ٶ.  õ
޶  ̴µ  ýα׷ֿ  å   ڰ 캻 ٷδ 1
  Jeffrey Ritcher Advanced Windows å Ұ̴. ѱ۹   
ٰ ѹ о ٶ. å ø̼ α׷Ӹ  ýα׷   
 å̴ å忡 ȾƳ°͸ε ǹ̰  ʹ. ׹ۿ  1 , NUMEGA 
SOFTWARE ý Ͼ John Robbins Debugging Applications  å    . 
߿ NUMEGA SOFTWARE ǰ SOFTICE Ÿ ϰ ε(׶ ˰Եǰ  
û α׷̶  . ڴ SOFTICE  ýα׷  Ҽ 
 ̴.) å   å̶ Ҽ ýۿ  뵵 ٷ, Ƹ å 
а ׷ Ÿ ϳ  ̴.    ٷ ̳ ڷḦ ˰ʹٸ 
Ŀ ̹̽ ¸ Ҷ Ұϱ .

5.  ¿...

  ´ "2 ٸ μ ּҰ !!" ι° ð̴.  ̹ ¿ ٷ꿹
 Debugging API װ ̿  Ÿ ۼغ, ٸ μ  츮  
ϴ  ˾ƺ.  ¸ ϴٺ   󺸴  ʾ Ͱ.  2
 ι ļ Ϸ   ´  ŸƮ  ɰ . ׷ ̹ º
    ä ̴ ʹ ñ...

(P.S) ߼޶ ⿡ Դٰ  «  øϴ. ̷ ¸ ϴٺ  
 ɰ Ƽ ϴ ʿϴٰ Ǵ κи ڰ  캸ҽϴ. ߼޿ 
 ô е鵵 װ, ⿡  Ͻô е鵵 ð ̶ ſ Ѱ 
ñ մϴ.